package com.efuture.array;

/**
 * @ClassNAME ArraySearch
 * @Description 二分法查找算法 必须是排序好的数据
 *查找原理:中间数据跟目标数据进行比较，如果中间数据小于目标数据，说明目标数据在中间数据右边，
 * 就取中间数据到右边的数据的中间元素，再进行比较，以此类推，找出目标数据。
 * @Author zhaoshanshan
 * @Date 2021/9/4 6:21 下午
 * @Version 1.0
 */
public class ArraySearch {
    private static int[] arrayTest = {23,24,56,57,66,78,88,90,200};

    public static void main(String[] args) {
        arraySearch(88);

    }

    /**
     * 找出数据value的下标
     * @param value
     */
    private static void arraySearch(int value){

//        // 数组排序
//        Arrays.sort(arrayTest);
        int beginIndex = 0;
        int endIndex = arrayTest.length-1;
        while (beginIndex<=endIndex){
            int minIndex = (beginIndex+endIndex)/2;
            if(arrayTest[minIndex]==value){
                System.out.println("找到"+value+"值的下标为:"+minIndex);
                return ;
            }
            else if(arrayTest[minIndex]<value){//中间元素小于目标元素 目标元素在右边
                //修改开始元素的值
                beginIndex = minIndex+1;
            }
            else if(arrayTest[minIndex]>value){//中间元素大于目标元素 目标元素在左边
                //修改结束元素的值
                endIndex = minIndex-1;
            }
        }
        System.out.println("没有找到"+value+"值的下标");
    }

}